package com.bmps.springcloud.insuredmicroservice.service.underwrite;

import com.bmps.springcloud.common.response.TaskResponseModel;
import com.bmps.springcloud.insuredmicroservice.model.accept.resquest.AcceptRequestDataModel;
import com.bmps.springcloud.insuredmicroservice.model.accept.resquest.ProductModel;
import com.bmps.springcloud.insuredmicroservice.model.accept.resquest.RequestModel;

/**
 * @author lyw
 * @date 2019-07-30 09:39:10
 */
public interface AcceptService {
    /**
     * 投核保规则校验
     *
     * @param key                    任务key
     * @param productModel           报文
     * @param acceptRequestDataModel 报文
     * @return TaskResponseModel
     */
    TaskResponseModel checkInsuredRoles(String key, ProductModel productModel, AcceptRequestDataModel acceptRequestDataModel);

    /**
     * 累计风险保额校验
     *
     * @param key                    任务key
     * @param productModel           报文
     * @param acceptRequestDataModel 报文
     * @return TaskResponseModel
     */
    TaskResponseModel checkAccumulatedRiskInsurance(String key, ProductModel productModel, AcceptRequestDataModel acceptRequestDataModel);

    /**
     * 保费试算
     *
     * @param key                    任务key
     * @param productModel           报文
     * @param acceptRequestDataModel 报文
     * @return TaskResponseModel
     */
    TaskResponseModel checkPremiumTrialCalculation(String key, ProductModel productModel, AcceptRequestDataModel acceptRequestDataModel);

    /**
     * 住院险风险保额校验
     *
     * @param key                    任务key
     * @param productModel           报文
     * @param acceptRequestDataModel 报文
     * @return TaskResponseModel
     */
    TaskResponseModel checkHospitalRiskInsurance(String key, ProductModel productModel, AcceptRequestDataModel acceptRequestDataModel);

    /**
     * 交通意外险风险保额校验
     *
     * @param key                    任务key
     * @param productModel           报文
     * @param acceptRequestDataModel 报文
     * @return TaskResponseModel
     */
    TaskResponseModel checkTrafficRiskInsurance(String key, ProductModel productModel, AcceptRequestDataModel acceptRequestDataModel);

    /**
     * 未成年人死亡责任险保额校验
     *
     * @param key                    任务key
     * @param productModel           计算的产品
     * @param acceptRequestDataModel 请求报文
     * @return TaskResponseModel
     */
    TaskResponseModel checkMinorDeathLiability(String key, ProductModel productModel, AcceptRequestDataModel acceptRequestDataModel);

    /**
     * 意外险风险保额
     *
     * @param key                    任务key
     * @param productModel           当前险种
     * @param acceptRequestDataModel 请求报文
     * @param object                 扩展
     * @return 结果
     */
    TaskResponseModel checkAccidentInsuranceAmount(String key, ProductModel productModel, AcceptRequestDataModel acceptRequestDataModel, Object object);

    /**
     * 计算保额任务
     *
     * @param key                    任务key
     * @param productModel           当前险种
     * @param acceptRequestDataModel 请求报文
     * @return 试算结果
     */
    TaskResponseModel checkAmntTrialCalculation(String key, ProductModel productModel, AcceptRequestDataModel acceptRequestDataModel);

    /**
     * 保费试算
     *
     * @param key          任务key
     * @param productModel 当前计算产品
     * @param requestModel 受理报文request节点
     * @return TaskResponseModel 结果
     */
    TaskResponseModel calculationAddPrem(String key, ProductModel productModel, RequestModel requestModel);

    /**
     * 相似信息校验
     *
     * @param key          任务key
     * @param requestModel 受理报文request节点
     * @return 结果
     */
    TaskResponseModel checkConflict(String key, RequestModel requestModel);
}
